Prévenir par email d'une connexion SSH
Sommaire
Ajout de la notification au démarrage avec PAM
Insérer une entrée dans pam.d/sshd
Impossible d’envoyer à une adresse gmail avec sendmail
alerte email quand une connexion ssh est réussie avec le fichier /etc/ssh/sshrc
Modifiez ou créez /etc/ssh/sshrc
Alternative contenu /etc/ssh/sshrc
Si vous souhaitez recevoir un mail dès que vous avez une connexion, voici un script qui vous sera bien utile. Avant de copier ce code assurez vous que vous pouvez envoyer des mails et que vous avez configuré correctement sSMTP et sendmail.
Vous pouvez tester votre configuration avec le code ci-dessous, vous devriez recevoir un email à votre@email sous une dizaine de secondes :
printf %b " __|__ \n -----o----- \n$(date -R)" | sendmail votre@email
Tout se passe en privilège root.
Dans le fichier /etc/pam.d/sshd rajoutez la ligne :
session optional pam_exec.so /usr/bin/firewall-ssh.sh
Vous n’avez pas besoin de reload, le changement se fait automatiquement.
Donc on crée le fichier : /usr/bin/firewall-ssh.sh avec les permissions suivantes -rwxr-xr-x soit :
chmod 755 firewall-ssh.sh
ls -l firewall-ssh.sh
-rwxr-xr-x 1 root root 887 févr. 2 22:26 firewall-ssh.sh
Pour le contenu vous aurez besoin de changer votre@email. Voici le contenu du fichier :
#!/bin/sh
dest=votre@email
#################################################################################
############################# Alerte connexion SSH. #############################
#################################################################################
user=${PAM_USER:-$USER}
vpshost=$(hostname -f)
if [ ! "$PAM_TYPE" = "open_session" ]; then
heure=$(/bin/date +"%T %A %d %B %Y")
printf "Subject: $PAM_TYPE for $user@$vpshost\n\n$heure" | /usr/sbin/sendmail $dest
exit 0
fi
printf %b "Subject: Notification de connexion SSH à votre VPS
From: $user <$user@$vpshost>
Date: $(/bin/date -R)
To: $dest
Bonjour,
Un utilisateur vient de se connecter en SSH à votre VPS.
\t Utilisateur : $user@$vpshost
\t Ip de connexion : $PAM_RHOST
\t Heure de connexion : $(/bin/date +"%T %A %d %B %Y")
Cordialement,
Firewall SSH - Approuvé par un avion" | /usr/sbin/sendmail -f "$user@$vpshost" $dest
Commençons par mettre à jour toutes les applications : apt-get update && apt-get upgrade.
Pour pouvoir envoyer des emails installez SSMTP avec : apt-get install ssmtp. Si vous cherchez sur un moteur de recherche, vous trouverez tout de suite les informations appropriées à votre adresse email par exemple : ssmtp gmail.
Modifions la configuration vim /etc/ssmtp/ssmtp.conf.
Par exemple, pour activer le TLS, utilisez UseSTARTTLS et UseTLS, vous devriez obtenir :
AuthUser=a@gmail.com
AuthPass=airbus
mailhub=smtp.gmail.com:587
UseTLS=YES
UseSTARTTLS=YES
FromLineOverride=YES
Pour un email chez OVH, on remplace la première ligne avec mailhub=ssl0.ovh.net:465 (comme indiqué sur la documentation.
N’oubliez pas de relancer sendmail avec : service sendmail reload pour qu’il prenne en compte votre nouvelle configuration.
Vous pouvez tester votre configuration avec le code ci-dessous, vous devriez recevoir un email à votre@email sous une dizaine de secondes :
printf %b " __|__ \n -----o----- \n$(date -R)" | sendmail votre@email
En cas de soucis, vous pouvez avoir besoin de modifier hostname (voir la commande hostname) avec l’ip ou nom de domaine approprié.
Allez vérifier vos logs : tail -f /var/log/mail.log.
Selon cette article vous devez ajouter à la fin du fichier /etc/mail/sendmail.mc :
CLIENT_OPTIONS(`Family=inet6,Addr=::ffff:127.0.0.1')dnl
Puis faire la commande (et répondre Y à toutes les questions) :
sendmailconfig
NB : Si vous utilisez votre propre nom de domaine, pensez à vérifier votre DNS et votre entrée SPF pour prévenir d’erreur silencieuse (présente dans tail -f /var/log/mail.log).
Attention: selon les commentaires, cela ne fonctionnera pas si l'utilisateur crée un fichier nommé ~/.ssh/rc. *
avec le contenu suivant:
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <from@address.com>" -t "Your Name <your.email@domain.com>" -s smtp.server.com &
Cela vous avertira par courrier électronique chaque fois que quelqu'un se connectera via SSH, et le login sera enregistré dans le syslog.
Remarque: vous aurez besoin du sendemailpackage ( sudo apt-get install sendemail) pour que la notification par courrier électronique fonctionne.
Remarque: fonctionne avec la redirection de port, mais pas avec l'option -N.
DESTINATAIRE="destinataire@exemple.eu"
VPHOST=$(hostname -f)
DATE=$(date "+%d.%m.%Y--%Hh%Mm")
IP=$(echo $SSH_CONNECTION | awk '{print $1}')
#IP=`echo $SSH_CONNECTION | cut -d " " -f 1`
LOCALISATION=$(curl -s ipinfo.io/"$IP" | jq -r '[.country, .city] | join(", ")')
REVERSE=$(dig -x $IP +short)
echo "Connexion de ${USER} sur $VPHOST
IP de connexion: ${IP}
Localisation appelant: ${LOCALISATION}
ReverseDNS: ${REVERSE}
Date: ${DATE}
" | mail -s "Connexion de ${USER} sur $VPHOST" $DESTINATAIRE